package com.atgugui.eduorder.controller;


import com.atgugui.commonutils.JwtUtils;
import com.atgugui.commonutils.Result;
import com.atgugui.eduorder.entity.TOrder;
import com.atgugui.eduorder.entity.TPayLog;
import com.atgugui.eduorder.service.TOrderService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;

/**
 * <p>
 * 订单 前端控制器
 * </p>
 *
 * @author testjava
 * @since 2021-09-15
 */
@Api(tags = "订单模块接口")
@RestController
@RequestMapping("/eduorder/t-order")
@CrossOrigin
public class TOrderController {

    @Autowired
    private TOrderService tOrderService;

    /**
     * 当用户点击页面中的立即支付按钮，生成一个订单信息，并将该订单信息保存到数据库中
     * 注意：当前的用户还没有购买，只是生成一个预购买的订单信息
     * 订单信息包括：
     *      1. 订单号(使用UUID生成唯一订单号)
     *      2. 课程信息(通过nacos进行远程调用eduservice模块中的接口)
     *      3. 讲师信息(同上)
     *      4. 会员信息(通过nacos进行远程调用eduucenter模块中的接口，这里我们可以通过用户的token实现查询，
     *         在前端中用户一旦登录，我们会将token令牌存放到http中的Header位置，这里我们需要通过request对象
     *         来获取这个token)
     * @param courseId
     * @return
     */
    @ApiOperation(value = "根据课程id生成对应订单信息接口")
    @GetMapping("/createOrder/{courseId}")
    public Result createOrder(@PathVariable String courseId, HttpServletRequest request) {
        // 从token中获取会员id
        String memberId = JwtUtils.getMemberIdByJwtToken(request);
        // 创建订单并且返回订单号
        String orderNo = tOrderService.createOrder(courseId,memberId);
        return Result.ok().data("orderNo",orderNo);
    }

    @ApiOperation(value = "根据订单号查询订单信息")
    @GetMapping("/getOrderInfo/{orderNo}")
    public Result getOrderInfo(@PathVariable String orderNo) {
        QueryWrapper<TOrder> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("order_no",orderNo);
        TOrder tOrder = tOrderService.getOne(queryWrapper);
        return Result.ok().data("order",tOrder);
    }

    @ApiOperation(value = "根据课程id和用户id查询是否支付当前课程接口")
    @GetMapping("/isBuyCourse/{courseId}/{memberId}")
    public boolean isBuyCourse(@PathVariable String courseId, @PathVariable String memberId) {
        QueryWrapper<TOrder> tOrderQueryWrapper = new QueryWrapper<>();
        tOrderQueryWrapper.eq("course_id",courseId).eq("member_id",memberId).eq("status",1);
        int count = tOrderService.count(tOrderQueryWrapper);
        return count > 0;
    }
}

